#ifndef SIP_WTTYPES_HPP__
#define SIP_WTTYPES_HPP__

#include <string>
#include <stdint.h>

namespace wtsip{

#define defineWtCodeType(EType, Num) EType

typedef enum tagSipCodeType
{
    defineWtCodeType(TRYING, 100),
    defineWtCodeType(RINGING, 180),
    defineWtCodeType(FORWARDED, 181),
    defineWtCodeType(QUEUED, 182),
    defineWtCodeType(PROGRESS, 183),
    defineWtCodeType(IS_OK, 200),
    defineWtCodeType(ACCEPTED, 202),
    defineWtCodeType(MULTIPLE, 300),
    defineWtCodeType(MOVED_PERM, 301),
    defineWtCodeType(MOVED_TEMP, 302),
    defineWtCodeType(USEPROXY, 305),
    defineWtCodeType(ALTER_SERV, 380),
    defineWtCodeType(BADREQUEST, 400),
    defineWtCodeType(UNAUTHORIZED, 401),
    defineWtCodeType(UNPAYMENT, 402),
    defineWtCodeType(FORBIDDEN, 403),
    defineWtCodeType(NOTFOUND, 404),
    defineWtCodeType(METHOD_REFUSE, 405),
    defineWtCodeType(REQUEST_UNACCEPTABLE, 406),
    defineWtCodeType(NO_PROXYAUTH, 407),
    defineWtCodeType(REQUEST_TIMEOUT, 408),
    defineWtCodeType(GONE, 410),
    defineWtCodeType(PRECOND_FAILED, 412),
    defineWtCodeType(REQUEST_LARGE, 413),
    defineWtCodeType(URI_LONG, 414),
    defineWtCodeType(UNSUPPORT_MEDIA, 415),
    defineWtCodeType(UNSUPPORT_URI, 416),
    defineWtCodeType(BAD_EXTENSION, 420),
    defineWtCodeType(NO_EXTENSION, 421),
    defineWtCodeType(INTERVAL_SMALL, 422),
    defineWtCodeType(INTERVAL_BRIEF, 423),
    defineWtCodeType(FLOW_FAILED, 430),
    defineWtCodeType(UNSUPPORT_OUTBOUND, 439),
    defineWtCodeType(UNAVAILABLE_TEMP, 480),
    defineWtCodeType(NOTEXIST_TRANS, 481),
    defineWtCodeType(LOOP, 482),
    defineWtCodeType(MANYHOPS, 483),
    defineWtCodeType(INCOMPLETE_ADDR, 484),
    defineWtCodeType(AMBIGUOUS, 485),
    defineWtCodeType(BUSY, 486),
    defineWtCodeType(REQUEST_TERM, 487),
    defineWtCodeType(UNACCEPT, 488),
    defineWtCodeType(UNSUPPORT_EVENT, 489),
    defineWtCodeType(REQ_PENDING, 491),
    defineWtCodeType(UNDECIPHERABLE, 493),
    defineWtCodeType(SERVER_ERROR, 500),
    defineWtCodeType(NOT_IMPLEMENTED, 501),
    defineWtCodeType(BAD_GATEWAY, 502),
    defineWtCodeType(UNAVAILABLE_SERVICE, 503),
    defineWtCodeType(SERVER_TIMEOUT, 504),
    defineWtCodeType(UNSUPPORT_VER, 505),
    defineWtCodeType(MESSAGE_LARGE, 513),
    defineWtCodeType(BUSY_EVERYWHERE, 600),
    defineWtCodeType(DECLINE, 603),
    defineWtCodeType(NOT_EXIST, 604),
    defineWtCodeType(NOT_ACCEPTABLE, 606),
    MAX_CODETYPE
} ESipCodeType;

#undef defineWtCodeType


#define defineWtMethod(_enum, _name, _rfc) _enum

typedef enum
{
    defineWtMethod(UNKNOWN, "UNKNOWN", "NA"),
    defineWtMethod(DO, "DO", " GB China"),
    defineWtMethod(ACK, "ACK", " RFC 3261"),
    defineWtMethod(BYE, "BYE", "RFC 3261"),
    defineWtMethod(CANCEL, "CANCEL", "RFC 3261"),
    defineWtMethod(INVITE, "INVITE", "RFC 3261"),
    defineWtMethod(NOTIFY, "NOTIFY", "RFC 3265"),
    defineWtMethod(OPTIONS, "OPTIONS", "RFC 3261"),
    defineWtMethod(REFER, "REFER", "RFC 3515"),
    defineWtMethod(REGISTER, "REGISTER", "RFC 3261"),
    defineWtMethod(SUBSCRIBE, "SUBSCRIBE", "RFC 3265"),
    defineWtMethod(RESPONSE, "RESPONSE", "RFC ????"),
    defineWtMethod(MESSAGE, "MESSAGE", "RFC ????"),
    //_MESSAGE,
    defineWtMethod(INFO, "INFO", "RFC 2976"),
    defineWtMethod(PRACK, "PRACK", "RFC 3262"),
    defineWtMethod(PUBLISH, "PUBLISH", "RFC draft"),
    defineWtMethod(SERVICE, "SERVICE", "!RFC"),
    defineWtMethod(UPDATE, "UPDATE", "RFC 3311"),
    MAX_METHODS
} EMethodTypes;

#undef defineWtMethod

typedef struct tagUri
{
    std::string szName;
    std::string szID;
    std::string szIP;
    uint32_t    iPort;

} SUri;


}//namespace

#endif
